/*
*    FileName: p2pserver.h
* Description: 用于p2p的直播
*     Version: 1.0
*        Date: 2011-07-19
*      Author: wulin
*/
#ifndef P2PSERVER_H
#define P2PSERVER_H

#include <QObject>
#include <QHostAddress>
class QUdpSocket;
class   QSqlQuery;

class P2PServer : public QObject
{
    Q_OBJECT
public:
    explicit P2PServer(QObject *parent = 0);
    ~P2PServer();



    //处理到来的请求
    QByteArray  handleComingRequest(QHostAddress clientIPReq,
            quint16 clientPortReq,const QByteArray &datagram);

    //增加一个peer。需要对topologyTree表进行更新，并通知这个peer的父节点
    QByteArray  addOnePeer(QHostAddress peerIP,quint16 peerPort,
                     const QByteArray &datagram);
    //移去一个peer。需要对topologyTree进行更新，并通知它的父节点，为它的子节点找到新的
    //父节点，并通知新的父节点。在播放器的析构函数中，注意发送停止播放命令给服务器。
    QByteArray  removeOnePeer(QHostAddress peertIP,quint16 peerPort,
                     const QByteArray &datagram);

    //某个socket一直没有心跳，除去拓扑表中的相关信息
    void    doWithDeadSocket(QString  deadIP,QString deadPort);
private:
    QUdpSocket *udpSocketOfP2PServer;

signals:

public slots:
    //增加一个视频源，即新建一棵树，初始化根节点
    bool addVideoSource(QString sourceIP,quint16 sourcePort,qint64 nodeMacAddr,
             quint8 sensorID);

};

#endif // P2PSERVER_H
